﻿Public Class Oferta : Implements IEquatable(Of Oferta)

    Private _Nombre As String
    Public Property Producto As String
    Private _Precio As Decimal
    Private _Fecha As Date
    Private _Cantidad As Integer

    ''' <summary>
    ''' Nombre con mas de 2 carácteres
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property Nombre As String
        Get
            Return _Nombre
        End Get
        Set(ByVal value As String)
            If value.Length >= 2 Then
                _Nombre = value
            End If
        End Set
    End Property
    
    ''' <summary>
    ''' Precio mayor que 0
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property Precio As Decimal
        Get
            Return _Precio
        End Get
        Set(ByVal value As Decimal)
            If value > 0 Then
                _Precio = value
            End If
        End Set
    End Property

    ''' <summary>
    ''' Fecha mayor a la actual
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property Fecha As Date
        Get
            Return _Fecha
        End Get

        Set(ByVal value As Date)
            If value >= Today Then
                _Fecha = value
            End If
        End Set
    End Property
    ''' <summary>
    ''' La Cantidad tiene que ser mayor de 0 
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property Cantidad As Integer
        Get
            Return _Cantidad
        End Get
        Set(value As Integer)
            If value > 0 Then
                _Cantidad = value
            Else
                _Cantidad = 0
            End If
        End Set
    End Property
    ''' <summary>
    ''' Constructor vacío. La oferta esta sin datos
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()

    End Sub

    ''' <summary>
    ''' La oferta se crea con datos
    ''' </summary>
    ''' <param name="nombre">Nombre</param>
    ''' <param name="producto">Producto</param>
    ''' <param name="precio">Precio</param>
    ''' <param name="fecha">Fecha</param>
    ''' <param name="cantidad">Cantidad</param>
    ''' <remarks></remarks>
    Public Sub New(ByVal nombre As String, ByVal producto As String, ByVal precio As Decimal, ByVal fecha As Date, ByVal cantidad As Integer)
        Me.Nombre = nombre
        Me.Producto = producto
        Me.Precio = precio
        Me.Fecha = fecha
        Me.Cantidad = cantidad
    End Sub

    ''' <summary>
    ''' Define cuando se consideran iguales dos ofertas, siendo del mismo tipo (oferta) les coincide el Nombre
    ''' </summary>
    ''' <param name="other"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function Equals1(other As Oferta) As Boolean Implements System.IEquatable(Of Oferta).Equals
        Return other IsNot Nothing AndAlso other.Nombre.ToLower = Me.Nombre.ToLower
    End Function
End Class
